import Vue from 'vue';
import Vuex from 'vuex';
import VuexPersistence from 'vuex-persist';
import httptool from '@/js/plugins/zry.plugins.httptool.js';
import bus from '@/components/common/bus.js';
Vue.use(Vuex);
const vuexLocal = new VuexPersistence({
	storage: window.sessionStorage
})
export const store = new Vuex.Store({
	state: {
		level: {}, //贸易商级别
		product_unit: {}, //产品参数
		productCategoryIds: {},
		price_type: {}, //计价方式
		userId: 2,
		userInfo: null,
		product_status: {},
		indent_order_status: {}, //订单状态
		indent_order_type: {}, //订单类型
		indent_cancel_status: {}, //取消状态
		city: {}, //城市
		invest: {}, //融资轮次
		career_tag: {}, //所属行业
		user_status: {}, //客户状态
		project_tag: {}, //项目标签
		mark_status: {}, //应标管理
		price_type: {}, //计价方式
		approve_result: {}, //实时盘价状态
		banner_picture: {}, //图片分类
		wkit: null
	},
	getters: {
		changeState: state => {
			//相当于vue实例中的methods,用于处理公用data
			//自vuex 面向组件的数据处理
		}
	},
	plugins: [vuexLocal.plugin],
	mutations: {
		changeValue(state, obj) {
			state[obj.name] = obj.value;
		},
		clearstore(state){
			for(var k in state) {
				if(k!='userInfo'&&k!='userId'&&k!='wkit'){
					state[k] = null;
				}				
			}
		},
		getDirByKey(state, key_) {
			return new Promise((resolve, reject) => {
				let obj = this.state[key_];
				if(Object.keys(obj).length != 0) {
					resolve(obj);
				} else {
					let params = {
						categorys: key_,
						pageNum: 1,
						pageSize: 100
					};
					httptool.ajaxPost("dict/getListValue", params, res => {
						res.arr_key = key_;
						bus.$emit('changeValue', res);
						resolve(res);
					})
				}
			})
		},
		//写法与getters相类似
		//组件想要对于vuex 中的数据进行的处理
		//组件中采用this.$store.commit('方法名') 的方式调用，实现充分解耦
		//内部操作必须在此刻完成(同步)
	},
	actions: {
		//使得mutations能够实现异步调用，实现例如延迟调用
		increment({
			commit
		}, payload) {
			commit('突变方法名')
			//payload应该是一个对象，可通过模板方法调用传入对象的方式将数据从组件传入vuex
		},
	},
	modules: {
		//引入某一个state的以上集合的模块，会自动分别填充到上面，使得结构更加清晰
	}
});